<?php

/**
 * winbinder 패키지 
 * 
 * 
 * @package php.ui.winbinder
 */

/**
 * WBEvent 클래스 
 *
 * @package php.ui.winbinder
 */
class WBEvent extends PObject { 

	private $_window;
	private $_id;
	private $_ctrl;
	private $_param1;
	private $_param2;
	private $_param3;

	/**
	 * 생성자 
	 *
	 */
	public function __construct($window = null, $id = 0, $ctrl = 0, $param1 = 0, $param2 = 0, $param3 = 0) { 
		$this->_window	= $window;
		$this->_id		= $id;
		$this->_ctrl		= $ctrl;
		$this->_param1	= $param1;
		$this->_param2	= $param2;
		$this->_param3	= $param3;
	}

	/**
	 * option value 설정하기 
	 *
	 * <code>$obj->class = AppWindow; // $obj->setClass(AppWindow);</code>
	 *
	 * @param string $key option key 
	 * @param mixed $value option value 
	 */
	public function __set($key, $value) { 
		$method= "set".ucwords($key);
		
		if (method_exists($this, $method)) { 		
			$this->$method($value);
		} 
	}

	/**
	 * $key 에 맞는 값 가져오기 
	 *
	 * <code>echo $obj->class;  // echo $obj->getClass();</code>
	 *
	 * @param string $key option key 
	 * @return mixed option value 
	 */
	public function __get($key) { 
		$method= "get".ucwords($key);
		
		if (method_exists($this, $method)) { 
			return $this->$method();
		} 
	}	
	
	/** 
	 * 이벤트가 실행된 window instance 얻어오기 
	 * 
	 * @return resource 
	 */
	public function getWindow() { 
		return $this->_window;
	}

	/** 
	 * 이벤트가 실행된 control instance 얻어오기 
	 * 
	 * @return resource 
	 */
	public function getCtrl() { 
		return $this->_ctrl;
	}

	/** 
	 * 이벤트가 실행된 param1 얻어오기 
	 * 
	 * @return int
	 */
	public function getParam1() { 
		return $this->_param1;
	}

	/** 
	 * 이벤트가 실행된 param2 얻어오기 
	 * 
	 * @return int 
	 */
	public function getParam2() { 
		return $this->_param2;
	}
	
	public function getBuffer() { 
		return $this->_param2;
	}
	
	public function setBuffer($buffer) { 
		$this->_param2 = $buffer;
	}	

	/** 
	 * 이벤트가 실행된 param3 얻어오기 
	 * 
	 * @return int
	 */
	public function getParam3() { 
		return $this->_param3;
	}

	/** 
	 * 이벤트가 실행된 control의 id 얻어오기 
	 * 
	 * @return resource 
	 */
	public function getId() { 
		return $this->_id;
	}

	/** 
	 * 이벤트가 실행된 WBComponent 얻어오기 
	 * 
	 * @return WBComponent 
	 */
	public function object() { 
		return wbObject($this->getId());
	}

	/** 
	 * 이벤트가 실행된 window 객체 얻어오기 
	 * 
	 * @return WBWindow 
	 */
	public function window() { 
		return wbWindow($this->getWindow());
	}

	/**
	 * 마우스의 x 좌표 
	 *
	 * @return int 
	 */
	public function getX() { 
		return ($this->_param2 & 0xFFFF);
	}

	/**
	 * 마우스의 y 좌표 
	 *
	 * @return int 
	 */
	public function getY() { 
		return ($this->_param2 & 0xFFFF0000) >> 16;
	}

	/**
	 * width 얻어오기 
	 *
	 * @return int 
	 */
	public function getWidth() { 
		return ($this->_param3 & 0xFFFF);
	}

	/**
	 * height 얻어오기 
	 *
	 * @return int 
	 */
	public function getHeight() { 
		return ($this->_param3 & 0xFFFF0000) >> 16;
	}
	
	public function getTab() { 
		return $this->_param2;
	}

	/**
	 * WBC_KEYDOWN 이벤트 확인하기 
	 *
	 * @return bool 
	 */
	public function isKeyDown() { 
		return $this->_param1 == WBC_KEYDOWN;
	}

	/**
	 * WBC_KEYUP 이벤트 확인하기 
	 *
	 * @return bool 
	 */
	public function isKeyUp() { 
		return $this->_param1 == WBC_KEYUP;
	}

	/**
	 * WBC_DBLCLICK 이벤트 확인하기 
	 *
	 * @return bool 
	 */
	public function isDoubleClick() { 
		return ($this->_param1 & WBC_DBLCLICK);
	}

	/**
	 * 마우스 LBUTTON 확인하기 
	 *
	 * @return bool 
	 */
	public function isLeftButton() { 
		return ($this->_param1 & WBC_LBUTTON);
	}

	/**
	 * 마우스 RBUTTON 확인하기 
	 *
	 * @return bool 
	 */
	public function isRightButton() { 
		return ($this->_param1 & WBC_RBUTTON);
	}

	/**
	 * 마우스 MBUTTON 확인하기 
	 *
	 * @return bool 
	 */
	public function isMiddleButton() { 
		return ($this->_param1 & WBC_MBUTTON);
	}

	/**
	 * CONTROL 키 확인 
	 *
	 * @return bool 
	 */
	public function isControl() { 
		return ($this->_param1 & WBC_CONTROL);
	}

	/**
	 * SHIFT 키 확인하기 
	 *
	 * @return bool 
	 */
	public function isShift() { 
		return ($this->_param1 & WBC_SHIFT);
	}

	/**
	 * ALT 키 확인하기 
	 *
	 * @return bool 
	 */
	public function isAlt() { 
		return ($this->_param1 & WBC_ALT);		
	}

	/**
	 * WBC_GETFOCUS 이벤트 확인하기 
	 *
	 * @return bool 
	 */
	public function isFocus() { 
		return ($this->_param1 == WBC_GETFOCUS);		
	}

	/**
	 * WBC_RESIZE 이벤트 확인하기 
	 *
	 * @return bool 
	 */
	public function isResize() { 
		return ($this->_param1 == WBC_RESIZE);
	}

	/**
	 * WBC_REDRAW 이벤트 확인하기 
	 *
	 * @return bool 
	 */
	public function isRedraw() { 
		return ($this->_param1 & WBC_REDRAW);
	}

	/**
	 * WBC_MOUSEDOWN 이벤트 확인하기 
	 *
	 * @return bool 
	 */
	public function isMouseDown() { 
		return ($this->_param1 & WBC_MOUSEDOWN);
	}

	/**
	 * WBC_MOUSEUP 이벤트 확인하기 
	 *
	 * @return bool 
	 */
	public function isMouseUp() { 
		return ($this->_param1 & WBC_MOUSEUP);
	}

	/**
	 * WBC_MOUSEMOVE 이벤트 확인하기 
	 *
	 * @return bool 
	 */
	public function isMouseMove() { 
		return ($this->_param1 & WBC_MOUSEMOVE);
	}

	/**
	 * WBC_HEADERSEL 이벤트 확인하기 
	 *
	 * @return bool 
	 */
	public function isHeaderSelected() { 
		return ($this->_param1 & WBC_HEADERSEL);
	}

	public function isMaximized() { 
		return (wb_get_size($this->_window) == WBC_MAXIMIZED);
	}

	public function isMinimized() { 
		return (wb_get_size($this->_window) == WBC_MINIMIZED);
	}

	public function isNormal() { 
		return (wb_get_size($this->_window) == WBC_NORMAL);
	}

	public function getCharacter() { 
		return chr($this->getKeyCode());
	}

	public function getKeyCode() { 
		return $this->_param2;
	}

	public function isIDClose() { 
		return ($this->_id == IDCLOSE);
	}

	public function toString() { 

		$temp = "";

		if ($this->isIDClose()) $temp .= "isIDClose". PHP_EOL;
		if ($this->isHeaderSelected()) $temp .= "isHeaderSelected". PHP_EOL;
		if ($this->isMouseMove()) {
				//$temp .= "isMouseMove". PHP_EOL;
				//$temp .= sprintf("%s, %s", $this->getX(), $this->getY());
		}
		if ($this->isMouseUp()) $temp .= "isMouseUp". PHP_EOL;
		if ($this->isMouseDown()) $temp .= "isMouseDown". PHP_EOL;
		if ($this->isRedraw()) $temp .= "isRedraw". PHP_EOL;
		if ($this->isResize()) { 
				$temp .= "isResize". PHP_EOL;
				$temp .= sprintf("%s, %s", $this->getWidth(), $this->getHeight());
		}
		if ($this->isFocus()) $temp .= "isFocus". PHP_EOL;
		if ($this->isAlt()) $temp .= "isAlt". PHP_EOL;
		if ($this->isKeyDown()) $temp .= "isKeyDown". PHP_EOL;
		if ($this->isKeyUp()) $temp .= "isKeyUp". PHP_EOL;
		if ($this->isDoubleClick()) $temp .= "isDoubleClick". PHP_EOL;
		if ($this->isLeftButton()) $temp .= "isLeftButton". PHP_EOL;
		if ($this->isRightButton()) $temp .= "isRightButton". PHP_EOL;
		if ($this->isMiddleButton()) $temp .= "isMiddleButton". PHP_EOL;
		if ($this->isControl()) $temp .= "isControl". PHP_EOL;
		if ($this->isShift()) $temp .= "isShift". PHP_EOL;
		return $temp;
	}
}

?>